﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using SIGERP_Datos;
using SIGERP_Entidades;

namespace SIGERP_Negocio
{
    public class Reclamos
    {
        public static List<Reclamo> GetAll()
        {
            return HndReclamos.GetAll();
        }

        public static Reclamo GetOne(int id)
        {
            return HndReclamos.GetOne(id);
        }

        public static int Agregar(Reclamo reclamo)
        {
            Reclamo r = HndReclamos.Insert(reclamo);
            Derivacion d = new Derivacion();
            d.reclamo = r;
            TipoDerivacion td = new TipoDerivacion();
            td.id = 0;
            d.tipo = td;
            d.departamento = r.subtiporeclamo.departamento;
            d.usuario_deriva = r.usuario;
            d.descripcion = "Derivación inicial";

            HndDerivacion.Insert(d);
            return r.id;
        }

        public static void Actualizar(Reclamo reclamo)
        {
            HndReclamos.Update(reclamo);
        }

        public static void Baja(Reclamo reclamo)
        {
            HndReclamos.Delete(reclamo);
        }

        public static List<Reclamo> buscarReclamosEnCursoPorCliente(Cliente c)
        {
            return HndReclamos.buscarReclamosEnCursoPorCliente(c);
        }

        public static List<Reclamo> buscarReclamosEnCursoPorClienteWEB(Cliente c)
        {
            return HndReclamos.buscarReclamosEnCursoPorClienteWEB(c);
        }

        public static List<Reiteracion> devolverReiteracionesReclamo(Reclamo r)
        {
            return HndReclamos.devolverReiteracionesReclamo(r);
        }

        public static void reiterarReclamo(Reiteracion r)
        {
            HndReclamos.reiterarReclamo(r);
        }

        public static DataTable buscarCantidadPorDeptoEstado(Departamento d) 
        {
            return HndReclamos.GetCantidadPorDeptoEstado(d);
        }

        public static List<Reclamo> BuscarReclamosPorDepto(Departamento d)
        {
            return HndReclamos.BuscarReclamosPorDepto(d);
        }

        public static void ActualizaDeptoActual(Reclamo r)
        {
            HndReclamos.ActualizaDeptoActual(r);
        }

        public static void ActualizaDeptoyUsuarioActual(Reclamo r)
        {
            HndReclamos.ActualizaDeptoyUsuarioActual(r);
        }

        public static void RechazarReclamo(Derivacion nueva_derivacion)
        {
            Reclamo r = nueva_derivacion.reclamo;
            r.departamento_actual=nueva_derivacion.departamento;
            Reclamos.ActualizaDeptoActual(r);

            Derivacion deriv_rechazar = Derivaciones.buscarUltimaDerivacion(r);
            deriv_rechazar.usuario_recepciona = Config.usuario;
            Derivaciones.RechazarDerivacion(deriv_rechazar);

            Derivaciones.Agregar(nueva_derivacion);
        }

        public static void DerivarReclamo(Derivacion nueva_derivacion)
        {
            Reclamo r = nueva_derivacion.reclamo;
            r.departamento_actual = nueva_derivacion.departamento;
            Reclamos.ActualizaDeptoyUsuarioActual(r);

            Derivaciones.Agregar(nueva_derivacion);
        }

        public static void RecepcionarReclamo(Reclamo r)
        {
            Derivaciones.AceptarDerivacion(r);
            r.usuario_actual = Config.usuario;
            HndReclamos.PasarAEnCurso(r);
        }

        public static List<Reclamo> buscarReclamosEnCursoPorUsuario()
        {
            return HndReclamos.buscarReclamosEnCursoPorUsuario(Config.usuario);
        }

        public static int cantEnCursoPorUsuario() 
        {
            return HndReclamos.getCountEnCursoPorUsuario(Config.usuario);
        }

        public static void resolverReclamo(Reclamo r) 
        {
            HndReclamos.resolver(r);
        }

        public static List<Reclamo> ConsultaReclamos(int tipo, DateTime? desde, DateTime? hasta, Cliente cliente, Area area, Departamento depto) 
        { 
            return HndReclamos.ConsultaReclamos(tipo, desde,hasta,cliente, area,depto);
        }

        public static void AsignarReclamo(Reclamo r)
        {
            HndReclamos.AsignarReclamo(r);
        }
    }
}
